home *** CD-ROM | disk | FTP | other *** search
/ C++ für Kids / C++ for kids.iso / Buch / hangx.cpp < prev    next >
C/C++ Source or Header  |  1999-01-30  |  5KB  |  180 lines

  1. //---------------------------------------------------------------------------
  2. #include <vcl\vcl.h>
  3. #pragma hdrstop
  4.  
  5. #include "hangy.h"
  6. //---------------------------------------------------------------------------
  7. #pragma resource "*.dfm"
  8.  
  9. const String Datei = "c:\\cpp\\buch\\Hangman.txt";
  10. String RateText, Geraten;
  11. int OK, Nr, Laenge, Max;
  12. bool Fertig;
  13. TStringList *Liste;
  14. TForm1 *Form1;
  15.  
  16. //---------------------------------------------------------------------------
  17. __fastcall TForm1::TForm1(TComponent* Owner)
  18.     : TForm(Owner)
  19. {
  20. }
  21. //---------------------------------------------------------------------------
  22. void __fastcall TForm1::SetZero (void)
  23. {
  24.   Geraten = "";
  25.   Nr = 0;
  26.   OK = 0;
  27.   Fertig = false;
  28.   Image1->Canvas->Brush->Color = clGray;
  29.   Image1->Canvas->Rectangle(0,0,140,200);
  30. }
  31. //---------------------------------------------------------------------------
  32. void __fastcall TForm1::DrawHangMan (void)
  33. {
  34.   Image1->Canvas->Pen->Width = 3;
  35.   Image1->Canvas->Brush->Color = clSilver;
  36.   switch (Nr)
  37.   {
  38.     case 1:
  39.       Image1->Canvas->MoveTo (30,10);
  40.       Image1->Canvas->LineTo (30,200);
  41.       break;
  42.     case 2:
  43.       Image1->Canvas->MoveTo (30,10);
  44.       Image1->Canvas->LineTo (95,10);
  45.       break;
  46.     case 3:
  47.       Image1->Canvas->MoveTo (95,10);
  48.       Image1->Canvas->LineTo (95,30);
  49.       break;
  50.     case 4:
  51.       Image1->Canvas->Brush->Color = clRed;
  52.       Image1->Canvas->Ellipse (80,30,110,65);
  53.       break;
  54.     case 5:
  55.       Image1->Canvas->Ellipse (80,65,110,130);
  56.       break;
  57.     case 6:
  58.       Image1->Canvas->MoveTo (90,130);
  59.       Image1->Canvas->LineTo (90,170);
  60.       break;
  61.     case 7:
  62.       Image1->Canvas->MoveTo (100,130);
  63.       Image1->Canvas->LineTo (100,170);
  64.       break;
  65.     case 8:
  66.       Image1->Canvas->Ellipse (75,165,95,175);
  67.       break;
  68.     case 9:
  69.       Image1->Canvas->Ellipse (95,165,115,175);
  70.       break;
  71.     case 10:
  72.       Image1->Canvas->Brush->Color = clAqua;
  73.       Image1->Canvas->Ellipse (80,30,110,65);
  74.       Image1->Canvas->Brush->Color = clYellow;
  75.       Image1->Canvas->Ellipse (86,38,95,48);
  76.       Image1->Canvas->Ellipse (95,38,104,48);
  77.       Image1->Canvas->Arc (86,54,104,58,104,56,86,56);
  78.       break;
  79.     case 11:
  80.       Image1->Canvas->Brush->Color = clFuchsia;
  81.       Image1->Canvas->Ellipse (80,30,110,65);
  82.       Image1->Canvas->Brush->Color = clLime;
  83.       Image1->Canvas->Ellipse (86,38,95,48);
  84.       Image1->Canvas->Ellipse (95,38,104,48);
  85.       Image1->Canvas->Arc (86,52,104,58,86,55,104,55);
  86.   }
  87. }
  88. //---------------------------------------------------------------------------
  89. void __fastcall TForm1::FormCreate(TObject *Sender)
  90. {
  91.   randomize ();
  92.   Liste = new TStringList;
  93.   SetZero ();
  94.   try
  95.   {
  96.     Liste->LoadFromFile (Datei);
  97.     Max = Liste->Count;
  98.   }
  99.   catch (...)
  100.   {
  101.     Panel1->Caption = "Ohne Worte!";
  102.     Max = 0;
  103.   }
  104. }
  105. //---------------------------------------------------------------------------
  106. void __fastcall TForm1::NewButtonClick(TObject *Sender)
  107. {
  108.   SetZero ();
  109.   if (Max > 0) RateText = UpperCase(Liste->Strings[random(Max)]);
  110.   else RateText = UpperCase("Zehplusplus");
  111.   Laenge = RateText.Length();
  112.   for (int i=0; i<Laenge; i++)
  113.   {
  114.     Geraten = Geraten + "?";
  115.   }
  116.   Panel1->Caption = Geraten;
  117.   Label1->Caption = "Buchstaben eintippen!";
  118. }
  119. //---------------------------------------------------------------------------
  120. void __fastcall TForm1::ReadyButtonClick(TObject *Sender)
  121. {
  122.   Nr = 0;
  123.   while (Nr < 11) {Nr++; DrawHangMan ();}
  124.   Panel1->Caption = RateText;
  125.   if (RateText.IsEmpty())
  126.     Label1->Caption = "Da ist kein Wort";
  127.   else
  128.     Label1->Caption = "ist das Wort";
  129. }
  130. //---------------------------------------------------------------------------
  131. void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
  132. {
  133.   String Taste = UpperCase(Key);
  134.   bool Enthalten = false;
  135.  
  136.   if (!Fertig)
  137.   {
  138.     // Jeden Buchstaben einzeln ⁿberprⁿfen
  139.     for (int i=1; i<=Laenge; i++)
  140.     {
  141.       if (Taste == RateText.SubString(i,1))
  142.       {
  143.         if (Taste != Geraten.SubString(i,1))
  144.         {
  145.           OK++;
  146.           Geraten[i] = Key;
  147.           Geraten = UpperCase(Geraten);
  148.         }
  149.         Enthalten = true;
  150.       }
  151.     }
  152.     // Wenn Key enthalten, anzeigen
  153.     if (Enthalten)
  154.       Panel1->Caption = Geraten;
  155.     // sonst Hangman weiterzeichnen
  156.     else
  157.     {
  158.       Nr++;
  159.       if (Nr < 11) DrawHangMan ();
  160.     }
  161.     // Wenn alle Buchstaben geraten, OK
  162.     if ((OK >= Laenge) && (Nr < 10))
  163.     {
  164.       if (RateText.IsEmpty())
  165.         Label1->Caption = "Klick auf NEU!";
  166.       else
  167.         Label1->Caption = "OK";
  168.       SetZero ();
  169.       Fertig = true;
  170.     }
  171.     // Wenn Hangman vollstΣndig, TOT
  172.     else if ((Nr >= 10) && (!Fertig))
  173.     {
  174.       Panel1->Caption = RateText;
  175.       Label1->Caption = "TOT";
  176.     }
  177.   }
  178. }
  179. //---------------------------------------------------------------------------
  180.